package 面试;

/**
 * 汉诺塔问题
 *
 * n 个圆盘需要移动 2^n - 1 次。
 */
public class Hanoi {

    public static void move(int n, String from, String buffer, String to) {
        if (n == 1) {
            System.out.println("from " + from + " to " + to);
            return;
        }
        // 第一次将最右边的作为缓存
        move(n - 1, from, to, buffer);
        // 然后将剩下的放到中间作为缓存
        move(1, from, buffer, to);
        // 最后把中间的移出去，借助最左边的作为缓存
        move(n - 1, buffer, from, to);
    }

    public static void main(String[] args) {
        Hanoi.move(3, "H1", "H2", "H3");
    }
}
